#include <iostream>
#include <vector>
#include <cmath>

class DATA{
    private:
    int index;
    double val;
    public:
    void setup_index(int i){index=i;}
    void setup_val(double i){val=i;}
    int out_index(){return index;}
    double out_val(){return val;}
};

int stable_quick_sort(std::vector<DATA> &_arr);
int partition_val(std::vector<DATA> &_arr,int _x1,int _x2);
int quicksort_val(std::vector<DATA> &_arr,int _x1,int _x2);
int easysort(std::vector<DATA> &_arr,int _x);

int main (int argc, char *argv[]){
    int n = -1;
    std::cin>>n;
    std::vector<DATA> A(n);
    for(int i = 0; i<n;i++){
        A[i].setup_index(i+1);
    }
    //assign a one decimal places to A[i]
    for(int i = 0; i<n;i++){
        double v;
        std::cin>>v;
        int vp=15*v;
        A[i].setup_val(vp/10.0);}
    for(int i=0;i<n;i++){
        std::cout<<A[i].out_index()<<",\t";
    }
    std::cout<<std::endl;
    for(int i=0;i<n;i++)
        std::cout<<A[i].out_val()<<",\t";
    std::cout<<std::endl;
    stable_quick_sort(A);
    return 0;
}

int stable_quick_sort(std::vector<DATA> &_arr){
    quicksort_val(_arr,0,_arr.size()-1);
    std::cout<<"after sort1"<<std::endl;
    for(int i=0;i<_arr.size();i++)
        std::cout<<_arr[i].out_index()<<",\t";
    std::cout<<std::endl;
    for(int i=0;i<_arr.size();i++)
        std::cout<<_arr[i].out_val()<<",\t";
    std::cout<<std::endl;
    std::cout<<"after sort2"<<std::endl;
    std::vector<DATA> brr;
    int j=0;
    for(int i=0;i<_arr.size();){
        j=i;
        while(fabs(_arr[j].out_val()-_arr[i].out_val())<0.001){
            brr.push_back(_arr[j]);
            brr.back().setup_val(brr.back().out_index()/1.0);
            j++;
        }
        quicksort_val(brr,i,j-i-1);
        for(;i<j;i++)
        _arr[i].setup_index((int)brr[i].out_val());
    }
    for(int i=0;i<_arr.size();i++)
        std::cout<<_arr[i].out_index()<<",\t";
    std::cout<<std::endl;
    for(int i=0;i<_arr.size();i++)
        std::cout<<_arr[i].out_val()<<",\t";
    std::cout<<std::endl;
    return 0;
}

int quicksort_val(std::vector<DATA> &_arr,int _x1,int _x2){
    if(_x2-_x1>=3){
    int p = partition_val(_arr,_x1,_x2);
    quicksort_val(_arr,_x1,p);
    quicksort_val(_arr,p+1,_x2);}
    else{
        switch(_x2-_x1+1){
        case 0:case 1:
        return 0;
        case 2:
        if(_arr[0].out_val()>_arr[1].out_val())
        std::swap(_arr[0],_arr[1]);break;
        case 3:
        easysort(_arr,_x1);break;
        default:
        return -1;}
    }
}

int partition_val(std::vector<DATA> &_arr,int _x1,int _x2){
    int left = _x1;
    int right = _x2;
    DATA pivat = _arr[_x1];
    while(left!=right){
        while(_arr[right].out_val()>=pivat.out_val() && right>left)
        right--;
        while(_arr[left].out_val()<=pivat.out_val() && left<right)
        left++;
        if(right>left)
        std::swap(_arr[left],_arr[right]);
    }
        _arr[_x1]=_arr[left];
        _arr[left]=pivat;
        return left;
}

int easysort(std::vector<DATA> &_arr,int _x){
    if(_arr[_x].out_val()<_arr[_x+1].out_val()){
        if(_arr[_x].out_val()>_arr[_x+2].out_val()){
            std::swap(_arr[_x+1],_arr[_x+2]);
            std::swap(_arr[_x],_arr[_x+1]);
            }
        else if(_arr[_x+1].out_val()>_arr[_x+2].out_val())
        std::swap(_arr[_x+1],_arr[_x+2]);
    }
    else{
        std::swap(_arr[_x],_arr[_x+1]);
        if(_arr[_x].out_val()>_arr[_x+2].out_val()){
            std::swap(_arr[_x+1],_arr[_x+2]);
            std::swap(_arr[_x],_arr[_x+1]);
            }
        else if(_arr[_x+1].out_val()>_arr[_x+2].out_val())
        std::swap(_arr[_x+1],_arr[_x+2]);
    }
    return 0;
}